package com.sky.mapper;

import com.sky.dto.MaterialTemplatePageQueryDTO;
import com.sky.entity.MaterialTemplate;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 材料模板Mapper接口
 */
@Mapper
public interface MaterialTemplateMapper {

    /**
     * 新增材料模板
     * @param materialTemplate 材料模板
     * @return 影响行数
     */
    int insert(MaterialTemplate materialTemplate);

    /**
     * 根据ID删除材料模板
     * @param id 材料模板ID
     * @return 影响行数
     */
    int deleteById(@Param("id") Long id);

    /**
     * 更新材料模板
     * @param materialTemplate 材料模板
     * @return 影响行数
     */
    int updateById(MaterialTemplate materialTemplate);

    /**
     * 根据ID查询材料模板
     * @param id 材料模板ID
     * @return 材料模板
     */
    MaterialTemplate selectById(@Param("id") Long id);

    /**
     * 根据材料名称查询材料模板
     * @param materialName 材料名称
     * @return 材料模板
     */
    MaterialTemplate selectByMaterialName(@Param("materialName") String materialName);

    /**
     * 根据材料名称查询材料模板（排除指定ID）
     * @param materialName 材料名称
     * @param excludeId 排除的ID
     * @return 材料模板
     */
    MaterialTemplate selectByMaterialNameExcludeId(@Param("materialName") String materialName, @Param("excludeId") Long excludeId);

    /**
     * 分页查询材料模板
     * @param queryDTO 查询条件
     * @return 材料模板列表
     */
    List<MaterialTemplate> selectPageWithCondition(@Param("query") MaterialTemplatePageQueryDTO queryDTO);

    /**
     * 查询材料模板总数
     * @param queryDTO 查询条件
     * @return 总数
     */
    Long countWithCondition(@Param("query") MaterialTemplatePageQueryDTO queryDTO);

    /**
     * 根据启用状态查询材料模板列表
     * @param isEnabled 启用状态
     * @return 材料模板列表
     */
    List<MaterialTemplate> selectByEnabled(@Param("isEnabled") Integer isEnabled);

    /**
     * 批量删除材料模板
     * @param ids ID列表
     * @return 影响行数
     */
    int batchDeleteByIds(@Param("ids") List<Long> ids);

    /**
     * 更新材料模板状态
     * @param id 材料模板ID
     * @param status 状态
     * @return 影响行数
     */
    int updateStatus(@Param("id") Long id, @Param("status") Integer status);
}
